using System;
using System.Collections.Generic;
using System.Text;

using miciv.Geometry;

namespace miciv.Rendering
{
    public interface IRenderer
    {
        bool HasPendingRenderables { get; }
        IRendererContext RendererContext { get; set; }
        bool CanSupportVertexDefinition(VertexDefinition _vertexFormat);
        bool CanSupportRenderable(IRenderable _renderable);
        bool CanSupportRenderableType(Type _type);
        void Add(IRenderable _renderable);
        void Remove(IRenderable _renderable);
        void BeginScene();
        void BeginRender();
        void RenderAllOpaques();
        void RenderAllTransparents();
        void Render(IRenderable _renderable);
        void EndRender();
        void EndScene();
        ManagedVertexBuffer<T> CreateBuffer<T>(int _sSize) where T : struct;
        void ReleaseBuffer<T>(ManagedVertexBuffer<T> _mVB) where T : struct;
        IVertexFeeder CreateFeeder(int _sSize);
        List<IVertexFeeder> CreateFeeders(IShape _shape);
        void ReleaseFeeder(IVertexFeeder _vertexFeeder);
        void ReleaseFeeders(List<IVertexFeeder> _vertexFeeders);
    }
}
